;This bootloader is suitable to an ARM-Cortex-M device(except ARM-Cortex-M0(+) device cause address 0xE000ED08 is useless)
;理论上这个BootLoader适用于目前除ARM-Cortex-M0外的任何ARM-Cortex-M内核设备。
;编译可能会有警告，无需理会，需保证从上电后或系统复位后运行本Bootloader
;本Bootloader应该编译到芯片内核启动后寻址的FLASH首地址，如STM32为0x08000000，本工程已经在MDK的Target选项卡中设置好了
;编写此Bootloader的缘由：
;因为使用的AT32F435ZMT7的FLASH前面部分为零等待区域，执行效率高，因此写了这个Bootloader, 编译后仅占用36字节FLASH
;将原来的用于引导和升级应用程序APP的Bootloader的业务代码放到非零等待的FLASH区域中，
;将零等待的FLASH区域留给APP应用程序,提升应用程序APP的执行效率


DST_VECTOR_TBL_BASE     EQU     0x083B0000              ;填写要跳转到的目标程序中断向量表基地址

                        PRESERVE8
                        THUMB

                        AREA    RESET, DATA, READONLY
                        DCD     0
                        DCD     reset_handler

                        AREA    |.text|, CODE, READONLY

reset_handler   PROC

                        LDR     R0, =DST_VECTOR_TBL_BASE
                        LDR     R1, [R0]
                        MSR     MSP, R1                 ;设置MSP
                        LDR     R1, =0xE000ED08
                        STR     R0, [R1]                ;设置中断向量偏移
                        ADD     R0, #4
                        LDR     R1, [R0]
                        BX      R1                      ;跳转到目标程序复位中断复位函数
                        ALIGN
                        ENDP
                        END
